home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / basic / exenam.bas < prev    next >
BASIC Source File  |  1993-02-15  |  2KB  |  46 lines

  1.      DEFINT A-Z
  2.      '$INCLUDE: 'qb.bi'
  3.      DECLARE FUNCTION ExeName$ ()
  4.  
  5. FUNCTION ExeName$
  6.  
  7.      'Returns full name of currently running program.
  8.      '(Works only under DOS 3.x)
  9.  
  10.      DIM Regs AS RegType
  11.      Regs.ax = &H62 * 256                   'Int 21h, function 62h
  12.      CALL INTERRUPT(&H21, Regs, Regs)
  13.  
  14.      DEF SEG = Regs.bx                      'Returns PSP segment in BX.
  15.      EnvPtr& = PEEK(44) + PEEK(45) * 256    'Get env segment at byte 44.
  16.      DEF SEG = EnvPtr&                      'Point to env block.
  17.  
  18.      Byte = 0                               'Scan thru env variables
  19.      DO                                     'until we reach a double-null,
  20.           IF PEEK(Byte) = 0 THEN            'signifying end-of-list.
  21.              IF PEEK(Byte + 1) = 0 THEN
  22.                 Byte = Byte + 2
  23.                 EXIT DO
  24.              END IF
  25.           END IF
  26.           Byte = Byte + 1
  27.      LOOP
  28.  
  29.      IF PEEK(Byte) = 1 THEN                 'If next byte is 1, then
  30.         Byte = Byte + 2                     'program name follows.
  31.         Temp$ = SPACE$(128)                 'Read name into Temp$, one
  32.         StrPtr = 0                          'byte at a time.
  33.         DO
  34.              IF PEEK(Byte) = 0 THEN EXIT DO
  35.              StrPtr = StrPtr + 1
  36.              MID$(Temp$, StrPtr, 1) = CHR$(PEEK(Byte))
  37.              Byte = Byte + 1
  38.         LOOP
  39.         ExeName$ = LEFT$(Temp$, StrPtr)
  40.      ELSE
  41.         ExeName$ = ""
  42.      END IF
  43.      DEF SEG
  44.  
  45. END FUNCTION
  46.